package data;

import java.io.Serializable;

public class Temps implements Serializable{
	   private int heures;
	   private int minutes ;// de 0 � 59
	   private int secondes ; // de 0 � 59
	     
	   // CONSTRUCTEURS

	   public Temps(){
	       heures = 0;
	       minutes = 0;
	       secondes = 0;
	   }

	  public Temps(int h, int m, int s){// initialise heures, minutes,                          
	       heures = h; // secondes avec h, m, s
	       minutes = m;
	       secondes = s;
	       normaliser();
	  }

	  public Temps( long t){ // initialise heures, minutes, secondes 
	       Temps t1; // avec le temps t exprim� 
	       t1 = conversionInverse(t);
	       heures = t1.heures;
	       minutes = t1.minutes;
	       secondes = t1.secondes;
	  }

	    //   CONVERSIONS

	    public long conversion(){
	       return ((heures*60L)+minutes)*60+secondes ;
	    }

	    public Temps conversionInverse(long t){
	        Temps te = new Temps();
	        te.secondes = (int)(t%60);
	        t = t/60;
	        te.minutes = (int)(t%60);
	        te.heures = (int)(t/60);
	        return te ;
	    }

	    public void normaliser(){
	       long t = conversion();
	       secondes = (int)(t%60);
	       t = t/60;
	       minutes = (int)(t%60);
	       heures = (int)(t/60);
	   }

	   // ACCESSEURS

	   public int getHeures(){ return heures ;}

	   public int getMinutes() { return minutes ;}

	   public int getSecondes(){ return secondes;} 

	   public void setHeures(int h){ heures = h ;}

	   public void setMinutes(int m){ minutes = m ; normaliser() ;}

	   public void setSecondes(int s){ secondes = s ; normaliser() ;}

	   //  AJOUTS 

	   public Temps ajouter(Temps te){
	      long t = conversion() + te.conversion() ;
	      return conversionInverse(t) ; 
	   }

	   public Temps ajouterUneSeconde(){
	      long t = conversion() + new Temps(0,0,1).conversion() ;
	      return conversionInverse(t); 
	   }

	   // COMPARAISONS 

	   public int compareA(Temps te){ // retourne <0 si this < te, 
	                                   // 0 si this==te, >0 si this> te
	      long t1 = conversion() ;
	      long t2 = te.conversion() ;
	      return (int)(t1 - t2) ; 
	   }

	   public boolean egal(Temps te){// retourne vrai si this = te
	      long t1 = conversion() ;
	      long t2 = te.conversion() ;
	      return t1 == t2 ; 
	   }

	   public String toString(){
	      return heures + " : " + minutes + " : " + secondes;
	  }
	}
